package com.zhentao.engine;

import com.zhentao.dto.RuleExecuteRequestDTO;
import com.zhentao.pojo.ParamRule;
import com.zhentao.vo.RuleExecuteResultVO;

/**
 * 规则引擎管理器接口
 * @author zhentao
 * @date 2024-12-19
 */
public interface RuleEngineManager {
    
    /**
     * 根据规则编码执行规则
     * @param request 执行请求
     * @return 执行结果
     */
    RuleExecuteResultVO executeRule(RuleExecuteRequestDTO request);
    
    /**
     * 根据规则对象执行规则
     * @param rule 规则对象
     * @param request 执行请求
     * @return 执行结果
     */
    RuleExecuteResultVO executeRule(ParamRule rule, RuleExecuteRequestDTO request);
    
    /**
     * 批量执行规则
     * @param ruleCodes 规则编码列表
     * @param request 执行请求
     * @return 执行结果列表
     */
    java.util.List<RuleExecuteResultVO> executeRules(java.util.List<String> ruleCodes, RuleExecuteRequestDTO request);
    
    /**
     * 校验规则语法
     * @param ruleContent 规则内容
     * @param engineType 引擎类型
     * @return 校验结果，null表示校验通过
     */
    String validateRuleSyntax(String ruleContent, String engineType);
    
    /**
     * 注册规则引擎
     * @param engine 规则引擎实现
     */
    void registerEngine(RuleEngine engine);
    
    /**
     * 获取支持的引擎类型列表
     * @return 引擎类型列表
     */
    java.util.List<String> getSupportedEngineTypes();
    
    /**
     * 清除规则缓存
     * @param ruleCode 规则编码，null表示清除所有缓存
     */
    void clearCache(String ruleCode);
}

